Coursera week3
Logistic Regression(ロジスティック回帰)
通常の回帰分析だと、yの予測値である仮定関数$ h_\theta(x)は連続した値を取りますが、分類課題においては、予測値の値を
0 ≤$ h_\theta(x)≤ 1にしたいです。なぜなら、0か1のような離散値でカテゴリ分けしたいからです。
もし$ h_\theta(x)≧ 0.5なら、y = 1、$ h_\theta(x)< 0.5なら、y = 0といったように、閾値(ここでは0.5)で分けます。
そのために登場するのが、ロジスティック関数 (Logistic Function)、別名シグモイド関数 (Sigmoid Function)です。
ロジスティック関数(シグモイド関数)
$ g(z) = \frac{1}{1 + e^{-z}}
https://gyazo.com/1d1bd4b4464a09e94267bd83d18e529d
Hypothesis function(仮説関数)
ロジスティック回帰における仮説関数は、回帰分析の仮説関数であった、$ \theta^Tx とロジスティック関数の合成関数になります。
仮説関数の式
$ h_\theta(x) = g(\theta^Tx)
Cost Function(目的関数)
線形回帰のコスト関数は下記のようでした。
$ J(\theta) = \frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)}) - y^{(i)})^2
ロジスティック関数は出力が波打ち、多くの局所最適化を引き起こすため、回帰分析に使用するのと同じコスト関数を使用することはできません。 つまり、凸関数ではありません。
また、コスト関数を最小化するためには、上記の式をみると、$ h_\theta(x) が$ y の値に近づくほど最小となり、遠ざかるほど最大になりそうです。これは、log関数を使って表現できます。
$ J(\theta) = -log(h_\theta(x)) ($ y = 1 のとき)
https://gyazo.com/c437f8a20b9fac7cf233fd0810affb80
$ J(\theta) = -log(1 - h_\theta(x)) ($ y = 0 のとき)
https://gyazo.com/c9f1244d71e3499c31c18fde00d2002d
以上のことをまとめ、場合分けをせずにコスト関数を表現すると、下のように書けます。
目的関数の式
https://gyazo.com/f565b0760b79f5098eaaff52e8336448
Gradient Descent(最急降下法)
ロジスティック回帰での再急降下法は、基本的に回帰分析と同じですが、仮説関数$ h_\theta(x) の中身が違います。
最急降下法の式
https://gyazo.com/2a2560c09a42dd143ae7e3965195115d
Multiclass Classification(複数クラスへの分類)
カテゴリーが3とか4のとき、ロジスティック回帰では、one vs restあるいはone vs allという方法を取ります。
基本的に1つのクラスを選択してから、他のすべてのクラスを1つのクラスにまとめます。 これを繰り返し行い、それぞれのケースにロジスティック回帰を適用し、最も高い値を返した仮説を予測として使用します。
次の図は、3つのクラスをどのように分類できるかを示しています。
https://gyazo.com/37c754b99f594a37fa72280c91a7b8d9
Overfitting(オーバーフィッティング)
説明変数$ x の次数を増やしていけば (x2, x3 ,...)、データを曲線でフィットすることができます。変数を増やすと、汎用性のないモデルになってしまいます。すなわち、トレーニングデータに対しては、高い精度を出すことができますが、テストデータでは、精度がとても低くなってしまいます。
次の図は、左から、アンダーフィッティング、精度の高いモデル、オーバーフィッティングの例です。
https://gyazo.com/69d0007780fd10d0cddd50c8b67c5dfa
汎用性があってかつ精度の高いモデルを作るためには、余計な説明変数を減らすか、パラメーターの大きさを減らす、正則化 (Regularization)という方法があります。
Regularization(正則化)
説明変数$ x がどんな多項式であっても、パラメータの値を限りなく小さくしてしまえば、予測値$ h_\theta(x) への影響を小さくできるため、オーバーフィットしにくくなります。
https://gyazo.com/b7d867cba2d7f819379e3802d01b8131
正則化するためには、正則化パラメーター (Regularization Parameter)$ \lambda を目的関数$ J(\theta) に導入します。
https://gyazo.com/d0fb222ab97b012672f6c0163cd155dd
注意すべきなのは、この2つ目の∑の項の範囲がj=1,...,nであること、つまり$ \theta_0 には$ \lambda がかからないことです。$ \theta_0 は説明変数の重み付けをしない、切片 (Intercept)項なので、正則化しなくていいのです。
これは、目的関数$ J(\theta) の最小値を求めるアルゴリズムである最急降下法 (Gradient Descent)にも影響してきます。
Gradient Descent with Regularization (正則化された最急降下法)
https://gyazo.com/1dd3e32d0f018463b448abd619a18c05
$ \lambda を大きくしすぎると 、$ \theta_0 以外の全ての$ \theta が限りなく0に近づきます。すると、アンダーフィットし、関数がほぼx軸に平行な直線になってしまいます。